;s11.asm
assume cs:codesg
datasg segment 
    db "Beginner's All-purpose Symbolic Instruction Code.",0 ;注意0结尾
datasg ends

codesg segment
	begin:  
	    mov ax, datasg
        mov ds, ax          ;初始化ds
        mov si, 0           ;ds：si指向字符串的首地址

        call letterc        ;调用子程序

        mov ax, 4c00H
        int 21H
	
	letterc:    
		push ax
		push si; 入栈保护
    
    letterc_loop:
        mov al,[si] ;将字符放到al
        cmp al,0    ;检测字符为零,是字符的结尾吗
        je exit     ;字符为零需要退出程序

        cmp al,'a'  ; al-'a' 和a做比较
        jb nextstr  ; 继续下一个字符

        cmp al,'z'  ; al-'a' 和a做比较
        ja nextstr  ; 继续下一个字符
         
        and al,11011111B;将al中的ASCII码的第5位置为0，变为大写字母
        mov ds:[si],al; 将原来的小写字符替换为大写
    nextstr:
        inc si
        jmp letterc_loop
	exit:
        pop si;
        pop ax;
        ret

codesg ends
end begin